package com.imut.lagain.service;
import org.slf4j.LoggerFactory;

import com.imut.lagain.entity.PeriodRecord;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 生理期智能预测服务接口
 */
public interface IPeriodPredictionService {
    
    /**
     * 预测下次月经开始日期
     * @param userId 用户ID
     * @return 预测的月经开始日期
     */
    LocalDate predictNextPeriodStart(Long userId);
    
    /**
     * 预测排卵日期
     * @param userId 用户ID
     * @return 预测的排卵日期
     */
    LocalDate predictOvulationDate(Long userId);
    
    /**
     * 预测易孕期
     * @param userId 用户ID
     * @return 易孕期日期范围
     */
    Map<String, LocalDate> predictFertilePeriod(Long userId);
    
    /**
     * 计算平均周期长度
     * @param userId 用户ID
     * @return 平均周期长度
     */
    Double calculateAverageCycleLength(Long userId);
    
    /**
     * 计算平均经期长度
     * @param userId 用户ID
     * @return 平均经期长度
     */
    Double calculateAveragePeriodLength(Long userId);
    
    /**
     * 分析症状模式
     * @param userId 用户ID
     * @return 症状分析结果
     */
    Map<String, Object> analyzeSymptomPatterns(Long userId);
    
    /**
     * 检测周期异常
     * @param userId 用户ID
     * @return 异常检测结果
     */
    Map<String, Object> detectCycleAnomalies(Long userId);
    
    /**
     * 生成健康建议
     * @param userId 用户ID
     * @param currentPhase 当前生理期阶段
     * @return 健康建议列表
     */
    List<Map<String, String>> generateHealthTips(Long userId, String currentPhase);
    
    /**
     * 获取周期统计信息
     * @param userId 用户ID
     * @return 统计信息
     */
    Map<String, Object> getCycleStatistics(Long userId);
    
    /**
     * 预测未来N个周期的日期
     * @param userId 用户ID
     * @param cycles 预测周期数
     * @return 预测结果
     */
    Map<String, List<LocalDate>> predictFutureCycles(Long userId, int cycles);
    
    /**
     * 计算当前生理期阶段
     * @param userId 用户ID
     * @return 当前阶段信息
     */
    Map<String, Object> getCurrentPhase(Long userId);
    
    /**
     * 获取周期异常列表
     * @param userId 用户ID
     * @return 周期异常列表
     */
    List<Map<String, Object>> getCycleAnomalies(Long userId);
    
    /**
     * 获取预测信息
     * @param userId 用户ID
     * @return 预测信息
     */
    Map<String, Object> getPredictions(Long userId);
    
    /**
     * 获取未来周期预测
     * @param userId 用户ID
     * @param cycles 预测周期数
     * @return 未来周期预测列表
     */
    List<Map<String, Object>> getFutureCycles(Long userId, int cycles);
}
